﻿Namespace Objects

    ''' <summary>
    ''' Stelt een verkoop voor. 
    ''' Dit komt overeen met een winkelbeurt, een leveringsbon of een stand
    ''' Deze klasse kan gebruikt worden om gemakkelijk de totalen van een verkoop te bekomen
    ''' </summary>
    Public Class Verkoop

        Private _datarow As ArtikelsDataSet.VerkopenRow

        ' totalen van de verkoop
        'Private _totaalMetLeeggoedEnCheques As Decimal
        'Private _leeggoedEnCheques As Decimal
        Private _btwTotalen As New BtwTotalen ' totaalprijs van producten per btw-percentage inclusief Leeggoed en Cheques
        Private _aantalKlanten As Integer = 0

#Region "Public property's"

        Public ReadOnly Property TotaalMetLeeggoedEnCheques() As Decimal
            Get
                Return _btwTotalen.TotaalMetLeeggoedEnCheques() ' _totaalMetLeeggoedEnCheques
            End Get
        End Property

        Public ReadOnly Property LeeggoedEnCheques() As Decimal
            Get
                Return _btwTotalen.TotaalLeeggoedEnCheques() ' _leeggoedEnCheques
            End Get
        End Property

        ''' <summary>
        ''' Totaalbedrag van alle verkoopsdetails zonder het leeggoed en de cheques.
        ''' Dit is ook het totaal van alles wat er in de kolommen volgens BTW staat
        ''' </summary>
        ''' <returns></returns>
        Public ReadOnly Property TotaalZonderLeeggoedEnCheques() As Decimal
            Get
                Return _btwTotalen.TotaalZonderLeeggoedEnCheques()
                'Dim totaal As Decimal = 0
                'For Each item As KeyValuePair(Of Single, BtwTotaal) In _btwTotalen
                '    totaal += item.Value.TotaalMetBtw
                'Next
                'Return totaal - LeeggoedEnCheques
            End Get
        End Property

        Public ReadOnly Property BtwTotalen() As BtwTotalen
            Get
                Return _btwTotalen
            End Get
        End Property

        Public ReadOnly Property Kasverschil() As Decimal
            Get
                If _datarow.IdSoort = Constants.VerkoopsoortIds.FACTUUR Then
                    Return 0D
                Else
                    Return _datarow.Begintotaal + TotaalZonderLeeggoedEnCheques() + _
                        LeeggoedEnCheques + _datarow.InUitKasBedrag - _datarow.NaarBankBedrag - _datarow.Eindtotaal
                End If
            End Get
        End Property

        Public ReadOnly Property BedragBancontact() As Decimal
            Get
                If (_datarow.IsBedragBancontactNull) Then
                    Return 0D
                End If
                Return _datarow.BedragBancontact
            End Get
        End Property

        Public ReadOnly Property BedragMaaltijdcheques() As Decimal
            Get
                If (_datarow.IsBedragMaaltijdchequesNull) Then
                    Return 0D
                End If
                Return _datarow.BedragMaaltijdcheques
            End Get
        End Property

        Public ReadOnly Property AantalKlanten() As Integer
            Get
                Return _aantalKlanten
            End Get
        End Property

#End Region

#Region "Constructor/initialisatie"

        Public Sub New(ByVal xdatarow As ArtikelsDataSet.VerkopenRow)
            _datarow = xdatarow
            BerekenTotalen()
        End Sub

#End Region

#Region "Public methods"

        Public Function TotaalPrijsExclusief() As Decimal
            Dim totaal As Decimal = 0
            For Each item As KeyValuePair(Of Single, BtwTotaal) In _btwTotalen
                totaal += item.Value.TotaalZonderBtw
            Next
            Return totaal
        End Function

        ''' <summary>
        ''' Totaalbedrag van de btw
        ''' </summary>
        ''' <returns></returns>
        Public Function TotaalBTW() As Decimal
            Dim totaal As Decimal = 0
            For Each item As KeyValuePair(Of Single, BtwTotaal) In _btwTotalen
                totaal += item.Value.Btw
            Next
            Return totaal
        End Function

#End Region

#Region "Private methods"

        Private Sub BerekenTotalen()
            Dim nummerVorigeKlant As Integer = 0
            _aantalKlanten = 0
            For Each detail As ArtikelsDataSet.VerkoopsDetailsRow In _datarow.GetVerkoopsDetailsRows
                Dim verkoopsDetail As New VerkoopsDetail(detail)
                '_totaalMetLeeggoedEnCheques += _
                '    (verkoopsDetail.TotaalPrijsZonderStatiegeld + verkoopsDetail.TotaalAfTeDrukkenStatiegeld) 'verkoopsDetail.TotaalPrijs geeft foute waarden!!!

                '_leeggoedEnCheques += verkoopsDetail.TotaalAfTeDrukkenStatiegeld

                'If (verkoopsDetail.IsCheque) Then
                '    _leeggoedEnCheques += verkoopsDetail.Prijs * verkoopsDetail.Aantal
                'End If

                'If (Not verkoopsDetail.IsLeeggoed) Then
                '    ' bij leeggoed mogen we dit niet toevoegen, omdat het via het statiegeld al toegevoegd wordt
                '    _btwTotalen.VoegToeAanTotaal(detail.BTW, verkoopsDetail.Prijs * verkoopsDetail.Aantal)
                'End If
                '_btwTotalen.VoegToeAanTotaal(0S, verkoopsDetail.TotaalAfTeDrukkenStatiegeld)

                _btwTotalen.VoegDetailToe(verkoopsDetail)

                If (detail.VolgnummerKlant <> nummerVorigeKlant) Then
                    _aantalKlanten += 1
                    nummerVorigeKlant = detail.VolgnummerKlant
                End If
            Next
        End Sub

#End Region

    End Class

End Namespace
